package com.uade.servlets;

import java.io.IOException;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import com.uade.business.BusinessDelegateImpl;
import com.uade.model.Compra;
import com.uade.model.Configuracion;
import com.uade.model.ModelUtilities;
import com.uade.model.Usuario;
import com.uade.model.exceptions.BusinessException;
import com.uade.model.exceptions.LogisticaMonitoreoException;
import com.uade.webservices.logisticaMonitoreo.VentaWS;

/**
 * Servlet implementation class CheckoutCarritoSrv
 */
public class CheckoutCarritoSrv extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private Logger log = Logger.getLogger(CheckoutCarritoSrv.class);

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public CheckoutCarritoSrv() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		try {
			Compra compra = (Compra) request.getSession()
					.getAttribute("compra");
			compra.setFecha(ModelUtilities.setFecha());
			Usuario usuario = compra.getUsuario();
			compra.setId(BusinessDelegateImpl.getInstance().checkOutCompra(
					compra));

			if (usuario.getCoordenadaX() == null
					|| usuario.getCoordenadaY() == null)
				log.warn("El usuario "
						+ usuario.getNombre()
						+ " no tiene coordenadas! no podran enviarse a logistica y monitoreo asegurese de cargarlas al registrarse en la aplicacion ");
			else {
				compra.setCoordenadaX(usuario.getCoordenadaX());
				compra.setCoordenadaY(usuario.getCoordenadaY());
			}
			// Logeo de la compra a logistica y monitoreo
			enviarLogVenta(compra.getXmlVenta());

			// Reiniciar carrito
			HttpSession sesion = request.getSession();
			compra = new Compra();
			compra.setUsuario(usuario);
			sesion.setAttribute("compra", compra);

			// Devuelvo la lista de articulos
			request.getSession().setAttribute("articulosCompra",
					compra.getItems());
			response.sendRedirect("jsp/ListarComrpaArticulos.jsp");

		} catch (BusinessException ex) {

		} catch (LogisticaMonitoreoException ex) {

		} catch (Exception ex) {
			ex.printStackTrace();

			String msg = ex.toString();
			request.setAttribute("mensaje", msg);
			response.sendRedirect("jsp/Error.jsp");
		}
	}

	/**
	 * Obtiene la lista de configuraciones envia los logs a auditoria y
	 * monitoreo
	 * 
	 * @param compra
	 * @throws BusinessException
	 * @throws LogisticaMonitoreoException
	 * @throws NamingException
	 */
	private void enviarLogVenta(String xml) throws BusinessException,
			LogisticaMonitoreoException, NamingException {

		// Obtiene la configuracion
		Configuracion conFe;
		conFe = BusinessDelegateImpl.getInstance()
				.obtenerConfiguracionLogisticaMonitoreoVenta();

		if (conFe != null) {

			VentaWS ventaws = new VentaWS(conFe);
			ventaws.enviarLogVenta(xml);
		} else {
			log.warn("No existe configuracion para realizar el log de la venta");
		}

	}
}
